Les listes

  • Les listes sont des objets mutables.
  • Les éléments sont eux-mêmes mutables. Il faut se méfier des copies de listes.
  • Les élémenst sont indexés. Le premier index est 0.

I) Définition d'une liste

a) Définition exhaustive

In [7]:
ma_liste=[3,"a",3.7,"hou"]
print(ma_liste)
print(f"Liste de longueur {len(ma_liste)}.")
[3, 'a', 3.7, 'hou']
Liste de longueur 4

b) À l'aide d'un range()

In [2]:
# une liste d'entiers : de 0 à 9 (attention pas de 10 !!!!!)
L=list(range(10))
print(L)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [5]:
# une liste des entiers de 2 à 7  (attention pas de 8 !!!!!)
L=list(range(2,8))
print(L)
[2, 3, 4, 5, 6, 7]

c) À l'aide d'une compréhension

C'est une méthode très efficace à recommander.

In [9]:
#liste de carrés
L=[x**2 for x in range(1,11)]
print(L)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
In [11]:
#liste de multiples de 17
L=[x for x in range(500) if x%17==0]
print(L)
[0, 17, 34, 51, 68, 85, 102, 119, 136, 153, 170, 187, 204, 221, 238, 255, 272, 289, 306, 323, 340, 357, 374, 391, 408, 425, 442, 459, 476, 493]

d) À l'aide l'instruction append()

In [22]:
# Liste d'entiers aléatoires entre 1 et 6
from random import randint


L=[]
for k in range(20):
    L.append(randint(1,6))
print(L)

# équivalent en comprésention : L=[randint(1,6) for k in range(20)]
[1, 4, 3, 4, 1, 2, 5, 3, 1, 1, 3, 2, 1, 5, 3, 4, 3, 2, 1, 6]
In [13]:
# La suite de Fibonacci
L=[1,1]
for k in range(20) :
    L.append(L[k]+L[k+1]) # on rajoute petit à petit les valeurs
print(L)
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711]

e) En tant que sous-liste

In [23]:
# à partir de l'élément [2]
ma_liste=["a","b","c","d","e","f"]
L=ma_liste[2:]
print(L)
['c', 'd', 'e', 'f']
In [24]:
# jusquá l'élément [1]
ma_liste=["a","b","c","d","e","f"]
L=ma_liste[:2]
print(L)
['a', 'b']
In [25]:
# entre les éléments [2] et [4]
ma_liste=["a","b","c","d","e","f"]
L=ma_liste[2:5]
print(L)
['c', 'd', 'e']
In [26]:
# tous les éléments
ma_liste=["a","b","c","d","e","f"]
L=ma_liste[:]
print(L)
['a', 'b', 'c', 'd', 'e', 'f']
In [27]:
# tous les éléments de 2 en 2
ma_liste=["a","b","c","d","e","f"]
L=ma_liste[::2]
print(L)
['a', 'c', 'e']
In [28]:
# tous les éléments à l'envers
ma_liste=["a","b","c","d","e","f"]
L=ma_liste[::-1]
print(L)
['f', 'e', 'd', 'c', 'b', 'a']
In [32]:
# à partir de l'élément [1] de 3 en 3
ma_liste=list(range(20))
L=ma_liste[1::3]
print(L)
[1, 4, 7, 10, 13, 16, 19]

II) Différentes façons de copier une liste

a) Copie en surface (shallow copy)

Cette solution rapide suffit pour les listes simples, mais pas pour les listes de listes par exemples

In [41]:
# Copie d'une liste simple
L1=[1,2,3]
L2=L1[:]
print(f"L1 = {L1}")
print(f"L2 = {L2}")
L2[0]=18
print("Après modification de L2, L1 reste inchangée :")
print(f"L1 = {L1}")
print(f"L2 = {L2}")
L1 = [1, 2, 3]
L2 = [1, 2, 3]
Après modification de L2, L1 reste inchangée :
L1 = [1, 2, 3]
L2 = [18, 2, 3]
In [40]:
# Exemple d'une liste de liste
L1=[[1,1],2,3]
L2=L1[:]
print(f"L1 = {L1}")
print(f"L2 = {L2}")
L2[0][0]=18
print("Après modification de L2, L1 aussi a changé :")
print(f"L1 = {L1}")
print(f"L2 = {L2}")
L1 = [[1, 1], 2, 3]
L2 = [[1, 1], 2, 3]
Après modification de L2, L1 aussi a changé :
L1 = [[18, 1], 2, 3]
L2 = [[18, 1], 2, 3]

b) Copie en profondeur (deep copy)

Cette fois-ci, les deux listes seront indépendantes.

In [42]:
# Exemplde d'une liste de liste
import copy
L1=[[1,1],2,3]
L2=copy.deepcopy(L1)  # à noter que L1[:] revient à faire copy.copy(L1)
print(f"L1 = {L1}")
print(f"L2 = {L2}")
L2[0][0]=18
print("Après modification de L2, L1 reste inchangée :")
print(f"L1 = {L1}")
print(f"L2 = {L2}")
L1 = [[1, 1], 2, 3]
L2 = [[1, 1], 2, 3]
Après modification de L2, L1 reste inchangée :
L1 = [[1, 1], 2, 3]
L2 = [[18, 1], 2, 3]

III) Accès aux éléments de la liste

a) Lecture d'une valeur

Attention, le premier indice d'une liste est 0 !

In [44]:
L=["a",5,9]
print(f"L[0]={L[0]}")
print(f"L[1]={L[1]}")
print(f"L[2]={L[2]}")
L[0]=a
L[1]=5
L[2]=9

b) Changement d'une valeur

In [45]:
# une liste simple
L=[1,5,7]
L[0]=14
print(L)
[14, 5, 7]
In [1]:
#une liste de listes
L=[[1,2],[3,4]]
L[1][0]=800
print(L)
[[1, 2], [800, 4]]

IV) Suppression d'éléments

a) Fonction pop()

Cette fonction enlève un élément de la liste et renvoie ce qui a été supprimé.

À noter qu'on ne peut enlever qu'un seul élément.

In [3]:
# on enlève l'élément [2]
L=["a","b","c","d","e","f"]
a=L.pop(2)
print(a)
print(L)
c
['a', 'b', 'd', 'e', 'f']
In [4]:
# on enlève le dernier élément
L=["a","b","c","d","e","f"]
a=L.pop()
print(a)
print(L)
f
['a', 'b', 'c', 'd', 'e']
In [5]:
# on enlève le premier élément
L=["a","b","c","d","e","f"]
a=L.pop(0)
print(a)
print(L)
a
['b', 'c', 'd', 'e', 'f']

b) Fonction del()

Cette fonction permet de supprimer un ou plusieurs éléments.

Elle ne renvoie pas les valeurs supprimées.

In [8]:
# on enlève l'élément [2]
L=["a","b","c","d","e","f"]
del L[2]
print(L)
['a', 'b', 'd', 'e', 'f']
In [9]:
# on enlève à partir de l'élément [2]
L=["a","b","c","d","e","f"]
del L[2:]
print(L)
['a', 'b']
In [18]:
# détruit la liste
L=["a","b","c","d","e","f"]
del L
print(L)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-18-53b351c568f3> in <module>
      2 L=["a","b","c","d","e","f"]
      3 del L
----> 4 print(L)

NameError: name 'L' is not defined

c) Fonction remove()

Cette fonction supprime le premier élément de valeur donnée.

Elle ne renvoie pas la valeur supprimée.

In [17]:
# on enlève le premier "W" uniquement
L=["a","b","W","c","W","d"]
print(L)
['a', 'b', 'W', 'c', 'W', 'd']

d) Par compréhension

Voici un moyen de supprimer toutes les occurences d'une valeur.

In [16]:
# on enlève tous les "W"
L=["a","b","W","c","W","d"]
L=[el for el in L if el!="W"]
print(L)
['a', 'b', 'c', 'd']

V) Ajouter des valeurs

a) Fonction append()

Cette fonction ajoute un élément en fin de liste.

In [19]:
L=["a","b","c","d","e","f"]
L.append("g")
print(L)
['a', 'b', 'c', 'd', 'e', 'f', 'g']

b) Fonction extend()

Cette fonction permet d'ajouter tous les éléments d'une liste.

In [22]:
L=["a","b","c","d","e","f"]
A=["g","h","i"]
L.extend(A)
# ou L=L+A
print(L)
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']

c) Fonction insert()

Cette fonction permet d'insérer un élément particulier à une position donnée.

In [24]:
# on insert à la position[2] la valeur "c"
L=["a","b","d","e","f"]
L.insert(2,"c")
print(L)
['a', 'b', 'c', 'd', 'e', 'f']

d) Insertion / remplacement de plusieurs éléments

On insère ou on remplace des éléments dans une liste.

In [32]:
# insertion à l'élément [2] sans suppression
L=["a","b","c","d"]
L[2:2]=["X","Y"]
print(L)
['a', 'b', 'X', 'Y', 'c', 'd']
In [31]:
# insertion à l'élément [2] après suppression de [2] et [3]
L=["a","b","c","d","e","f"]
L[2:4]=["X","Y","Z"]
print(L)
['a', 'b', 'X', 'Y', 'Z', 'e', 'f']
In [ ]:
 
In [ ]:
 
In [ ]: